package br.com.sged.relatorio;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.HashMap;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter;
import net.sf.jasperreports.engine.util.JRLoader;

import org.primefaces.model.DefaultStreamedContent;

	public class Relatorio 
	{
		public static final int RELATORIO_PDF = 1;
		public static final int RELATORIO_EXCEL = 2;
		public static final int RELATORIO_HTML = 3;
		public static final int RELATORIO_PLANILHA_OPEN_OFFICE = 4;
		
		@SuppressWarnings("deprecation")
		public void geraRelatorio(HashMap parametrosRel,String nomeRel,String nomeRelSaida,int tipoRel,String caminho) throws Exception
		{
			try {
				String caminhoRelatorio = caminho+"relatorio/RelatorioDocumento.jrxml";
				String caminhoArqJasper = caminhoRelatorio+ File.separator+nomeRel+".jasper";
				JasperReport relatorio = (JasperReport) JRLoader.loadObjectFromFile(caminhoRelatorio);
				JasperPrint impressao = JasperFillManager.fillReport(relatorio,parametrosRel);
				JRExporter tipoArquivoExportado = null;
				String extensaoArq = "";
				File arqGerado = null;
				switch(tipoRel)
				{
					case RELATORIO_PDF:
						tipoArquivoExportado = new JRPdfExporter();
						extensaoArq ="pdf";
						break;
					case RELATORIO_EXCEL:
						tipoArquivoExportado = new JRXlsxExporter();
						extensaoArq ="xlsx";
						break;
				}
				String caminhoArqRel = caminhoRelatorio+ File.separator+nomeRelSaida+"."+extensaoArq;
				arqGerado = new java.io.File(caminhoArqRel);
				tipoArquivoExportado.setParameter(JRExporterParameter.JASPER_PRINT, impressao);
				tipoArquivoExportado.setParameter(JRExporterParameter.OUTPUT_FILE,arqGerado);
				tipoArquivoExportado.exportReport();
				arqGerado.deleteOnExit();
				FileInputStream conteudoRel = new FileInputStream(arqGerado);
				//String arquivoRetorno = new DefaultStreamedContent(conteudoRel,"application/"+extensaoArq,nomeRelSaida+"."+extensaoArq);
				//response.sendRedirect();
			}
			catch (JRException e) 
			{
				try {
					throw new Exception("Não foi possível gerar o relatório!");
				} catch (Exception e1) {
					e1.printStackTrace();
				}
				e.printStackTrace();
			}
			catch(FileNotFoundException e)
			{
				throw new Exception("Arquivo do diretório não encontrado.",e);
			}
		}
}
